package com.tedu.api.thread;

import org.junit.Test;

import javax.imageio.stream.ImageInputStream;
import java.io.File;
import java.io.FileFilter;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.Consumer;

/**
 * Lambda表达式---()->{}【接口、抽象类--匿名内部类】
 *                     【集合遍历-匿名内部类】
 * Collection--List:存重复元素并且有序【保存数据结构一致】
 *             Set：存无序并且不重复【保存数据结构一致】
 *             Queue：队列结合业务
 * Map---------HashMap:键值对存储
 */
public class LambdaDemo {
    @Test
    public void testList(){
        //List集合：保存元素
        List<String> list=new ArrayList<>();
        list.add("白洋淀");
        list.add("正定古城");
        list.add("河头老街");
        list.add("白石山");
        //集合几种遍历“普通for、增强for、forEach方法
        for(String str: list){
            System.out.println("增强for："+str);
        }
        //支持forEach方法，遍历集合元素
        //Consumer针对List集合接口提供接口：功能获取List集合元素
        //accept() 获取List集合的所有元素
        list.forEach(new Consumer<String>() {
            public void accept(String s) {
                System.out.println("consumer接口遍历方案："+s);
            }
        });
        //支持forEach方法：遍历集合元素【Consumer 匿名内部类】
        //编写Lambda表达式写法
        list.forEach(s-> System.out.println("Lambda遍历方案："+s));
    }

    @Test
    public void testMap(){
        //创建Map集合
        Map<Integer,String> map=new HashMap<>();
        map.put(1,"唐山");
        map.put(2,"石家庄");
        map.put(3,"秦皇岛");
        map.put(4,"邯郸");
        //遍历集合：普通for、增强for、forEach(BiConSummer接口--匿名内部类)
        //键值对-->一组Entry对象
        //BiConSummer接口--获取每组Entry对象--appect()获取Entry对象
        map.forEach(new BiConsumer<Integer, String>() {
            public void accept(Integer integer, String s) {
                System.out.println("键"+integer+"值"+s);
            }
        });
        //使用Lambda表达式
       map.forEach((integer,s)->System.out.println("Lambda键"+integer));
    }
    /**
     * 作业：1.使用Lambda表达式完成Thread线程创建
     *      2.使用Lambda表达式完成Runnable线程创建
     *      3.IO流--FIle类：ListFIle(FileFilter)接口【5行】
     *      目标：【io FilterAPI】实现Lambda表达式完成
     *      4.IO流--FIle类：ListFIle(FileFilter)接口【2行】
     *      目标：【io FilterAPI】实现Lambda表达式完成
     *      5.集合：改成Lambda写法
     *      目标：【list包下ListAPI类下单元测试testComparator()】
     */
    @Test
    public void LambdaHomework1(){
        //使用Lambda表达式完成Thread线程创建
        //Thread类 Java定义线程类--具备启动start---
        //Thread类封装Runnable类--线程run运行
        Thread t1=new Thread(()->{for (int i=0;i<1000;i++){
            System.out.println("给我学的，一愣一愣");}});
        t1.start();
    }
    @Test
    public void LambdaHomework2(){
        //使用Lambda表达式完成Runnable线程创建
       //1.创建Runnable接口
       Runnable mr1=() -> {for (int i = 0; i < 1000; i++) {
               System.out.println("时间不等人，但我等你");}};
       //2.创建Thread线程类--start()
      Thread t2=new Thread(mr1);
      //3.启动线程
       t2.start();
    }
   @Test
    public void LambdaHomework3(){
        File o= new File("." + File.separator );
        FileFilter e=(pathname)->{
           return  pathname.getName().startsWith("s");
        };
       File[] subs = o.listFiles(e);
        for (int i = 0; i < subs.length; i++) {
            System.out.println(subs[i].getName());
        }
    }
    @Test
    public void LambdaHomework4(){
        for(File f:new File("."+File.separator+"API").listFiles((pathname)->{return pathname.getName().startsWith("s");})){
            System.out.println("遍历后过滤完成："+f);
        }
    }
    @Test
    public void LambdaHomework5() {
        List<String> list = new ArrayList<>();
        list.add("阿西吧");
        list.add("搜得死内");
        list.add("呦西");
        Collections.sort(list,(o1, o2)->{
            return o1.length()-o2.length();
        });
        System.out.println("排序后集合："+list);
    }
    }
